/**
 * Created by mahai on 2018/12/21.
 * 登录、注册
 *
 */

const express = require('express');
const router = express.Router();
const passport = require('passport');

const ArticleList = require('../../models/ArticleList');



//$rote GET api/articlelist
// @desc 返回请求的json数据
// @access public
router.get('/',(req,res)=>{
    res.send (`
        /**
        * [POST] api/articlelist/add
        * @desc 创建信息数据接口
        * 在请求头部Header添加 {Authorization:token}
        * @access private
        * param:{
        *  Title:""             标题       必填
        *  content：""          文章内容    必填
        *  dec：""              文章描述    必填
        *  tags：[]             标签id      必填
        *  writer:""            作者         必填
        *  img：“”              封面照
        *  writerId：“”         作者id        必填
        *  likenum：0           关注数量 默认是0
        *  messnum：0           留言数量 默认0
        *  upnum：0             点赞数量 默认0
        *  keyword：[]          文章关键字SE0
        *  state：1             文章发表转态  默认1   1：发表  2：草稿
        *  extra_params：{}     扩展字段
        * }
        *
        * 返回状态 status => 0 :接口404 ， 1:请求失败  2：成功
        * */
        
        /**
         * [GET] api/articlelist/all
         * @desc 获取所有已发表的文章
         * @access public
         * 创建时间降序排序
         * status => 0 :接口404 ， 1:请求失败  2：成功
         **/
         
        /***
         * [GET]  api/articlelist/pages
         * @desc 分页查询
         * @access 公有的
         * 创建时间降序排序
         * param {
         *  tag:标签id 查询
         *  keyword：文章关键字查询
         *  writer：作者名称
         *  writerId：作者id
         *  page：当前页    必填
         *  rows：当前显示条数 必填
         * }
         * */
         
         /**
         * [GET] api/articlelist/user?
         * @desc 分页获取用户的文章
         * 在请求头部Header添加 {Authorization:token}
         * @access 私有接口
         * query {
         *  tag:标签id
         *  keyword:文章关键字查询
         *  state: 文章状态
         *  userid：用户id 必填
         *  page:当前页
         *  rows：显示条数
         * }
         * status => 0 :接口404 ， 1:请求失败  2：成功
         **/
         
        /***
         * [GET] api/articlelist/:id
         * @desc 获取已发表的一个文章详情
         * @access public
         * 接口返回状态 status => 0 :接口404 ， 1:请求失败  2：成功
         */
         
         /***
         * [post] api/articlelist/edit/:id
         * @desc 编辑
         * 在请求头部Header添加 {Authorization:token}
         * @access private
         * @params {
         *  Title:String
         *  content:String
         *  dec:String
         *  tags:Array
         *  writer:String
         *  img:String
         *  state:Number
         *  keyword:Array
         *  likenum:Number
         *  messnum:Number
         *  upnum:Number
         *  extra_params:Object    整体更新
         * }
         * @返回
         * status => 0 :接口404 ， 1:请求失败  2：成功
         */
         
         /***
         * [delete] api/articlelist/delete/:id
         * @desc 删除
         * 在请求头部Header添加 {Authorization:token}
         * @access private 
         *
         * @返回
         * status => 0 :接口404 ， 1:请求失败  2：成功
         */
    `);
});

/**
 * [POST] api/articlelist/add
 * @desc 创建信息数据接口
 * 在请求头部Header添加 {Authorization:token}
 * @access private
 * param:{
 *  Title:""             标题       必填
 *  content：""          文章内容    必填
 *  dec：""              文章描述    必填
 *  tags：[]             标签id      必填
 *  writer:""            作者         必填
 *  img：“”              封面照
 *  writerId：“”         作者id        必填
 *  likenum：0           关注数量 默认是0
 *  messnum：0           留言数量 默认0
 *  upnum：0             点赞数量 默认0
 *  keyword：[]          文章关键字SE0
 *  state：1             文章发表转态  默认1   1：发表  2：草稿
 *  extra_params：{}     扩展字段
 * }
 *
 * 返回状态 status => 0 :接口404 ， 1:请求失败  2：成功
 * */
router.post('/add',passport.authenticate('jwt',{session:false}),(req,res)=>{
    const profileFileldes = {};
    if(req.body.Title) profileFileldes.Title = req.body.Title;
    if(req.body.content) profileFileldes.content = req.body.content;
    if(req.body.dec) profileFileldes.dec = req.body.dec;
    if(req.body.tags) profileFileldes.tags = req.body.tags;
    if(req.body.writer) profileFileldes.writer = req.body.writer;
    if(req.body.img) profileFileldes.img = req.body.img;
    if(req.body.writerId) profileFileldes.writerId = req.body.writerId;
    if(req.body.likenum) profileFileldes.likenum = req.body.likenum;
    if(req.body.messnum) profileFileldes.messnum = req.body.messnum;
    if(req.body.upnum) profileFileldes.upnum = req.body.upnum;
    if(req.body.keyword) profileFileldes.keyword = req.body.keyword;
    if(req.body.state) profileFileldes.state = req.body.state;
    if(req.body.extra_params){
        let extra_params = req.body.extra_params;
        if(JSON.stringify(extra_params) === '{}'){
            profileFileldes.extra_param = {"exports": "extra_params是扩展字段"};
        } else {
            profileFileldes.extra_params = req.body.extra_params
        }
    }
    new ArticleList(profileFileldes).save().then(profile => {
        res.json({
            data:profile,
            status:2
        })
    }).catch(err=>res.status(400).json({
        msg:err,
        status:0
    }))
});

/**
 * [GET] api/articlelist/all
 * @desc 获取所有已发表的文章
 * @access public
 * 创建时间降序排序
 * status => 0 :接口404 ， 1:请求失败  2：成功
 **/
router.get('/all',(req,res)=>{
    //安创建时间降序排序   发表的文章
    ArticleList.find({state:1}).sort({date:-1}).then(profile=>{
        if(!profile){
            return res.json({
                mas:'没有内容',
                status:1
            });
        }
        res.json({
            data:profile,
            status:2
        })
    }).catch(err => res.status(404).json({msg:err,status:0}))
});


/***
 * [GET]  api/articlelist/pages
 * @desc 分页查询
 * @access 公有的
 * 创建时间降序排序
 * param {
 *  tag:标签id 查询
 *  keyword：文章关键字查询
 *  writer：作者名称
 *  writerId：作者id
 *  page：当前页    必填
 *  rows：当前显示条数 必填
 * }
 * */
router.get('/pages',(req,res)=>{
    let tag = {state:1};
    if(req.query.tag) tag.tags = req.query.tag;
    if(req.query.keyword) tag.keyword = req.query.keyword;
    if(req.query.writer) tag.writer = req.query.writer;
    if(req.query.writerId) tag.writerId = req.query.writerId;
    let page = parseInt(req.query.page);
    let rows = req.query.rows;
    let count=0;
    let skip=0;
    let limit = 0;
    if(page <= 1){
        skip =0;
    } else {
        skip = rows*page - rows
    }
    //获取所有的数据计算个数
    ArticleList.find(tag).then(profile=> {
        count = profile.length;
    }).then(()=>{
        //总页数 大于当前页数
        if(Math.ceil(count/rows) >= page){
            if(Math.ceil(count/rows) == page){
                limit = count
            } else {
                limit = parseInt(rows)
            }
        } else {
            return res.json({
                data:[],
                status:1,
                msg:'没有数据'
            });
        }
        ArticleList.find(tag).skip(skip).limit(limit).sort({date:-1}).then(profile=>{
            if(!profile){
                return res.json({
                    data:[],
                    toatl:0,
                    page:page,
                    status:1,
                });
            }
            res.json({
                data:profile,
                toatl:count,
                page:page,
                status:2,
            })
        }).catch(err=>console.log(err))
    }).catch(err=>console.log(err))
});


/**
 * [GET] api/articlelist/user?
 * @desc 分页获取用户的文章
 * @access 私有接口
 * 在请求头部Header添加 {Authorization:token}
 * query {
 *  tag:标签id
 *  keyword:文章关键字查询
 *  state: 文章状态
 *  userid：用户id 必填
 *  page:当前页
 *  rows：显示条数
 * }
 * @返回
 * status => 0 :接口404 ， 1:请求失败  2：成功
 **/
router.get('/user',passport.authenticate('jwt',{session:false}),(req,res)=>{
    let queryObject = {};
    // let tag = {};
    if(req.query.userid) queryObject.writerId = req.query.userid;
    if(req.query.state) queryObject.state = req.query.state;
    if(req.query.tag) queryObject.tags = req.query.tag;
    if(req.query.keyword) queryObject.keyword = req.query.keyword;
    let page = parseInt(req.query.page) === 0 ? 1:parseInt(req.query.page);
    let rows = req.query.rows;
    let count=0;
    let skip=0;
    let limit = 0;
    if(page <= 1){
        skip =0;
    } else {
        skip = rows*page - rows
    }
    //获取用户的数据计算个数
    ArticleList.find(queryObject).then(profile=> {
        if(!profile){
            profile.length = 0;
        }
        count = profile.length;
    }).then(()=>{
        //总页数 大于当前页数
        if(Math.ceil(count/rows) >= page){
            if(Math.ceil(count/rows) == page){
                limit = count
            } else {
                limit = parseInt(rows)
            }
        } else {
            return res.json({
                data:[],
                msg:'查询不到数据',
                status:1
            });
        }
        ArticleList.find(queryObject).skip(skip).limit(limit).sort({date:-1}).then(profile=>{
            if(!profile){
                return res.json({
                    data:[],
                    toatl:0,
                    page:page,
                    status:1
                });
            }
            res.json({
                data:profile,
                toatl:count,
                page:page,
                status:2
            })
        }).catch(err=>console.log(err))
    }).catch(err=>console.log(err))
});


/***
 * [GET] api/articlelist/:id
 * @desc 获取已发表的一个文章详情
 * @access public
 * 接口返回状态 status => 0 :接口404 ， 1:请求失败  2：成功
 */
router.get('/:id',(req,res)=>{
    ArticleList.findOne({_id:req.params.id}).then(profile=>{
        if(!profile){
            return res.json({
                msg:'没有内容',
                status:1
            });
        }
        res.json({
            data:profile,
            status:2
        })
    }).catch(err => res.status(404).json({
        msg:'获取失败',
        status:0
    }))
});


/***
 * [post] api/articlelist/edit/:id
 * @desc 编辑
 * 在请求头部Header添加 {Authorization:token}
 * @access private
 * @params {
 *  Title:String
 *  content:String
 *  dec:String
 *  tags:Array
 *  writer:String
 *  img:String
 *  state:Number
 *  keyword:Array
 *  likenum:Number
 *  messnum:Number
 *  upnum:Number
 *  extra_params:Object    整体更新
 * }
 * @返回
 * status => 0 :接口404 ， 1:请求失败  2：成功
 */
router.post('/edit/:id',passport.authenticate('jwt',{session:false}),(req,res)=>{
    const profileFileldes = {};
    if(req.body.Title) profileFileldes.Title = req.body.Title;
    if(req.body.content) profileFileldes.content = req.body.content;
    if(req.body.dec) profileFileldes.dec = req.body.dec;
    else profileFileldes.dec ='';
    if(req.body.tags) profileFileldes.tags = req.body.tags;
    if(req.body.writer) profileFileldes.writer = req.body.writer;
    if(req.body.img) profileFileldes.img = req.body.img;
    if(req.body.img == ''){
        profileFileldes.img = '';
    }
    if(req.body.state) profileFileldes.state = req.body.state;
    if(req.body.keyword) profileFileldes.keyword = req.body.keyword;
    if(req.body.writerId) profileFileldes.writerId = req.body.writerId;
    if(req.body.likenum) profileFileldes.likenum = req.body.likenum;
    if(req.body.messnum) profileFileldes.messnum = req.body.messnum;
    if(req.body.upnum) profileFileldes.upnum = req.body.upnum;
    if(req.body.extra_params){
        let extra_params = req.body.extra_params;
        if(JSON.stringify(extra_params) === '{}'){
            profileFileldes.extra_param = {"exports": "extra_params是扩展字段"};
        } else {
            profileFileldes.extra_params = req.body.extra_params
        }
    }
    ArticleList.findOneAndUpdate(
        {_id:req.params.id},
        {$set:profileFileldes},
        {new:true}
    ).then(profile => res.json({
        data:profile,
        status:2
    })).catch(err=>res.status(404).json({
        msg:err,
        status:0
    }))
});

/***
 * [delete] api/articlelist/delete/:id
 * @desc 删除
 * 在请求头部Header添加 {Authorization:token}
 * @access private
 *
 * @返回
 * status => 0 :接口404 ， 1:请求失败  2：成功
 */
router.delete('/delete/:id',passport.authenticate('jwt',{session:false}),(req,res)=>{
    ArticleList.findOneAndRemove({_id:req.params.id}).then(profile=>{
        profile.save().then(profile=>res.json({
            data:profile,
            status:2
        }))
    }).catch(err=>res.status(404).json({msg:'删除失败',status:0}))
});

module.exports = router;
